草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - shared_ptr 与 CComPtr

我有点习惯通过COM进行引用计数的概念,但我对shared_ptr有点陌生。我在shared_ptr中没有找到CComPtr的几个不错的属性,我想知道防止误用shared_ptr的模式是什么。AddRef/Release模式保证每个对象只有一个引用计数(引用计数存储在对象本身),因此当您有一个随机指针围绕它创建一个CComPtr时,它是安全的。另一方面,shared_ptr有一个单独的refcount指针,所以在一个对象上创建一个新的shared_ptr是不安全的(为什么标准提供了一个构造函数,它在shared_ptr上采用T*,如果这样做很不安全?)。这似乎是一个很大的限制,我不明白

c++ - 需要缓存友好的数据结构来将字母的邻居存储在二维数组中

假设以下是我们正在操作的二维数组abcdefghijklmnop“f”的周围邻居是[abcegijk]。我正在尝试创建一个缓存友好的数据结构来存储节点的邻居。现在我有这样的东西structNeighbor{size_tneighborPosition[8][2];size_tsize;};typedefsize_tPosition[2];typedefNeighbor**NeighborTable;请注意,一个节点最多可以有8个邻居。有人有什么建议吗?我需要该结构是一个恒定时间的邻居查找,所以我将预先计算每个节点的邻居。 最佳答案

c++ - 无符号长整型

我提交了一个用C语言编写的矩阵求幂代码,用于查找第n个斐波那契数,我使用longlongint变量存储第n个斐波那契数模10000007的答案,法官给出了“超出时间限制”,但是当我使用“unsignedlonglongint”我的代码在规定时间内被接受,执行时间减少了。我无法理解为什么longlongint给出“超过时间限制”而接受“unsignedlonglongint”?(极端测试用例的答案在两种情况下都是正确的) 最佳答案 为了不重复任何人的努力,请参阅thisquestion还有这个moreadvancedquestiona

c++ - 在基类中调用 shared_from_this() 时的 bad_weak_ptr

我有一个SuperParent类,一个Parent类(派生自SuperParent)并且都包含一个shared_ptr到一个Child类(它包含一个weak_ptr到一个SuperParent)。不幸的是,我在尝试设置Child的指针时遇到了bad_weak_ptr异常。代码如下:#include#include#include#includeusingnamespaceboost;classSuperParent;classChild{public:voidSetParent(shared_ptrparent){parent_=parent;}private:weak_ptrpare

c++ - 适当使用 boost::shared_ptr?

关于boost::shared_ptr的问题:我有3个类(class)。A是某种负责管理一切的主类。B是一个类,它只具有完成某些工作的功能。Dispatcher只是一个围绕单独线程的类,它从B的Instaces中获取工作,在此线程中完成。所以它有点像这样工作:A有一个Dispatcher实例。现在,A偶尔会生成一个B的实例,并将其传递给调度程序。重要的是,B在完成后需要调用A::callback()。这就是为什么B在其构造函数中获取对A的引用(参见下面的代码)A.hppclassA:publicboost::enable_shared_from_this{public:A();void

c++ - 相对于 C 的内联汇编性能优势

首先,请原谅我,因为我的问题可能看起来很愚蠢,但我真的很好奇为什么我在这个非常简单的代码中获得了性能提升。这里是汇编代码:__asm{moveax,0movecx,0jmpstartloopnotequal:inceaxmovecx,eaxsubecx,2startloop:cmpeax,2000000000jnenotequal};这是C代码:longx=0;longii=0;for(;ii在我的i52500k机器上完成C代码大约需要1060毫秒(在发布版本中),汇编在780毫秒内完成。速度提高了约25%。我不明白为什么会得到这个结果,因为25%相差很大。编译器不够聪明,无法生成与我

c++ - 在 Cocoa 应用程序中使用大型 C++ 库的推荐方法?

我正在尝试开发一个可以“堆叠”FITS图像的应用程序。要读取FITS图像,我可以使用CCFits(一个C++库)或CFITSIO(一个C库)——没有原生的Objective-C库。我更愿意使用CCFits,因为它允许面向对象的设计,我希望这能让我更好地组织程序。我已经尝试过使用CFITSIO,但一段时间后它变得相当笨拙(当然,这可能是因为我在开发大型应用程序方面缺乏经验)。总的来说,解决这个问题的最佳方法是什么?我应该为CFITSIO函数编写包装器并编写我自己的类吗?有没有办法在Objective-C中使用C++类-该库包含很多类,我知道我可以使用不透明指针来环绕这些类,但是如何保留类

c++ - 设置 cl.exe 的输出路径

我正在使用命令行参数Fo,命令行是这样的:file1.c/ZI/nologo/W3/WX-/Od/Oy-/D"WIN32"/D"_DEBUG"/D"_CONSOLE"/D"_UNICODE"/D"UNICODE"/Gm/EHsc/RTC1/GS/fp:precise/Zc:wchar_t/Zc:forScope/Gd/analyze-/errorReport:queue/bigobj/FdDebug\vc100.pdb/FoDebug\/FaDebug\但有些文件仍然会在Debug文件夹之外生成(exe、ilk、pdb)我做错了什么? 最佳答案

c++ - 将 auto_ptr 转换为 shared_ptr

如何将std::auto_ptr更改为boost::shared_ptr?这是我的限制:1.我正在使用一个API类,让我们称之为only_auto返回这些指针2.我需要在auto_only中调用3.我的语义涉及共享,所以我确实需要使用shared_ptr)4.类中only_autooperator=private防止copy5.only_auto对象必须通过克隆调用std::auto_ptrcreat_only_auto();我知道模板显式shared_ptr(std::auto_ptr&r);但是我该如何在这种情况下使用它呢?一个super简化的代码示例:#include#inclu

c++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

我正在尝试使用libsvm对于某个复杂的应用程序,并且由于libsvm主要是一个C库,因此在加载某些数据后,必须使用自定义API函数来释放内存。这就是我的意思:structsvm_model*model;model=svm_load_model("pathtomodelfile");//dosomeprocessingsvm_free_and_destroy_model(&this->model);这些是我使用的libsvmAPI函数的定义:structsvm_model*svm_load_model(constchar*model_file_name);voidsvm_free_an